#include "client.h"

void process_command(ClientInfo* client, char* command) {
    // 定义一个字符指针数组，用于存储命令参数
    char* argv[MAX_ARGS]={0};
    // 定义一个整数变量，用于记录参数数量
    int argc = 0;
    // 打印原始命令字符串

    // 例子：
    // command == "      cd    dir"
    // 使用strtok函数分割命令字符串，以空格为分隔符
    // token == "cd", 下次用strtok(NULL, " ")来获取下一个token
    char* token = strtok(command, " "); 
    // 再次打印命令字符串，此时command已被strtok修改
    // 循环处理每个分割后的token
    while (token != NULL && argc < MAX_ARGS) {
        // 将当前token存储到argv数组中，并增加参数计数
        argv[argc++] = token;
        // 继续获取下一个token
        token = strtok(NULL, "\0");
    }

    // 如果没有参数（即命令为空），则直接返回
    if (argc == 0) return;

    if (strcmp(argv[0], "cd") == 0) {
        handle_cd(client, argc, argv);
    } else if (strcmp(argv[0], "ls") == 0) {
        handle_ls(client, argc, argv);
    } else if (strcmp(argv[0], "puts") == 0) {
        handle_puts(client, argc, argv);
    } else if (strcmp(argv[0], "gets") == 0) {
        handle_gets(client, argc, argv);
    } else if (strcmp(argv[0], "rm") == 0) {
        handle_rm(client, argc, argv);
    } else if (strcmp(argv[0], "pwd") == 0) {
        handle_pwd(client, argc, argv);
    } else if (strcmp(argv[0], "mkdir") == 0) {
        handle_mkdir(client, argc, argv);
    } else {
        printf("未知命令: %s\n", argv[0]);
    }
}